#pragma once

#include <QObject>
#include <QString>
#include <QThread>
#include <QMutex>
#include <zip.h>
#include "packconfig.h"

class PackWorker : public QObject
{
    Q_OBJECT

public:
    explicit PackWorker(QObject *parent = nullptr);
    virtual ~PackWorker();

    // 设置打包配置
    void setConfig(const PackConfig& config);
    
    // 设置输出文件路径（可选，如果不设置则使用配置中的路径）
    void setOutputFile(const QString& outputFile);

public slots:
    // 开始打包
    void startPacking();
    
    // 执行打包工作
    void doPackFiles();
    
    // 取消打包
    void cancelPacking();

signals:
    // 进度信号 (0-100)
    void progressChanged(int progress);
    
    // 状态信息信号
    void statusChanged(const QString& status);
    
    // 错误信号
    void errorOccurred(const QString& error);
    
    // 完成信号
    void packingFinished(bool success, const QString& outputPath);

private:
    bool addFileToZip(zip_t* zipFile, const QString& filePath, const QString& entryName);
    bool addFolderToZip(zip_t* zipFile, const QString& folderPath, const QString& entryName);
    void updateProgress(int current, int total);
    
    PackConfig m_config;
    QString m_outputFile;
    bool m_cancelled;
    QMutex m_mutex;
    
    // 进度统计
    int m_totalItems;
    int m_currentItem;
};
